/** 
* @author : 褚国强
* @date 创建时间：2021年7月27日 下午3:58:57 
* @version 1.0
*/
package com.bsoft.project.utils;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.UUID;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

/** 
* @author : 褚国强
* @date 创建时间：2021年7月27日 下午3:58:57 
* @Description:  post 接口参数生成工具类
* @version 1.0 
* @parameter 
* @since 
* @return 
*/
public class DzfpHttpJsonCreate {
	
	/** 
	* @Description:  post 接口参数生成方法
	* @parameter   
	*/
	public static HashMap<String, String> getDzfpHttpJson(HashMap<String, Object> params) throws Exception{
		String uuid =  UUID.randomUUID().toString();
		String datetime = getCurrentTime();
		HashMap<String, String> result = new HashMap<String, String> ();
		result.put("method", params.get("method").toString());  //接口服务名称
		result.put("app_id", params.get("app_id").toString());  //应用账号
		result.put("format", params.get("format").toString());
		result.put("datetime", datetime);  //yyyyMMddHHmmss
		result.put("version", params.get("version").toString());   // 版本号，默认版本3.0.0
		result.put("message_id", uuid);  //请求生成一个唯一请求编码uuid
		result.put("message", params.get("message").toString());  //请求业务参数，参见具体接口描述，需转换为base64编码
		result.put("security", getSecurity(uuid,datetime,params));  //请求串的防伪码
		return result;
	}
	
	private static String getCurrentTime(){
		Calendar calendar = Calendar.getInstance();
		Date date = calendar.getTime();
		DateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");
		return df.format(date);
	}
	
	/**
	 * 
	* @author : 褚国强
	* @date 创建时间：2021年7月28日 下午1:54:02
	* @Description: 防伪码生成
	* @version 1.0
	* @parameter
	* @since
	* @return
	 */
	private static String getSecurity(String uuid, String datetime, HashMap<String, Object> params) throws Exception{
		String securityString = params.get("app_key").toString() + 
				params.get("app_id").toString() +  
				datetime + 
				params.get("format").toString() +
				params.get("message").toString() +
				uuid +
				params.get("method").toString() +
				params.get("version").toString() +
				params.get("app_key").toString();
		return HMACSHA256(securityString, params.get("app_key").toString()).toUpperCase();
	}
	/**
	 * 
	* @author : 褚国强
	* @date 创建时间：2021年7月28日 下午1:54:02
	* @Description: HMACSHA256摘要
	* @version 1.0
	* @parameter
	* @since
	* @return
	 */
	private static String HMACSHA256(String data, String appKey) throws Exception {
        Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
        SecretKeySpec secret_key = new SecretKeySpec(appKey.getBytes("UTF-8"), "HmacSHA256");
        sha256_HMAC.init(secret_key);
        byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
        StringBuilder sb = new StringBuilder();
        for (byte item : array) {
            sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
        }
        return sb.toString();
    }
}
